import {defineStore} from 'pinia'

import {LoginType,login,UserInfoType,getUserInfo} from '@/api/login/index'
import {useRouter} from 'vue-router'
/**
 * 自定义token类型
 */
interface UserStoreType{
    token:string,
    userInfo:UserInfoType
}
/**
 * pinia中,调用登录方法，成功则存储token
 */
let userStore =defineStore("User",{
    state:():UserStoreType=>{
        return {
            // 初始化token
            token:sessionStorage.getItem("token")||'',
            //初始化用户信息
            userInfo:{
                name:sessionStorage.getItem("name")||'',
                avatarUrl:sessionStorage.getItem("avatarUrl")||''
            }
        }
    },
    getters:{},
    actions:{
        /* 调用登录api,保存登录成功获取的token，到pinia中 */
        async doLogin(loginForm:LoginType){
            let {code,data}=await login(loginForm);
            if(code==200){
                // 如果登录成功
                this.token=data;
                //将数据保存在sessionStorage中，用于后续登录状态校验
                sessionStorage.setItem("token",this.token);
                //回显用户信息
                this.doGetUserInfo();
            }
        },
        /* 调用回显用户信息api，将获取的用户信息存储在pinia中 */
        async doGetUserInfo(){
            let {code,data}=await getUserInfo();
            if(code==200){
                this.userInfo=data;
                sessionStorage.setItem("name",data.name);
                let avatarUrl=data.avatarUrl ==null? '':data.avatarUrl;
                sessionStorage.setItem("avatarUrl",avatarUrl);
            }
        },
        /* 退出登录,清空用户信息 */
        doLogout(){
            // 清空pinia,
            this.token='';
            this.userInfo.name=='';
            this.userInfo.avatarUrl='';
            // 清空sessionStorage
            sessionStorage.clear();
        }
    }
})
// 设置默认导出
export default userStore;